/**
 * 给定数组A，要求将其改造为等差数列，记作B
 * 求SIGMA{(Ai-Bi)^2}最小
 * 注意到B其实就是一条直线，因此其实就是线性回归。
 * 
 * 令等差数列的表达为 ki + b ,其中k和b为未知数，记作
 * f(k, b) = SIGMA{(ki+b-Ai)^2} 
 * 当偏导数取0有最小值，因此
 * 
 *  df
 * ---- = SIGMA{i}*k + N*b - SGIMA{Ai} = 0
 *  dk
 *  df
 * ---- = SGIMA{i^2}*k + SIGMA{i}*b - SIGMA{iAi} = 0
 *  db
 * 
 * 其实就是一个二元一次方程组，解之即可
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using Real = long double;
using llt = long long;
using pii = pair<int, int>;
using vi = vector<int>;

int N;
vector<llt> A;

Real proc(){
    vector<vector<Real>> xishu(2, vector<Real>(3, 0));
    for(int i=0;i<N;++i){
        xishu[0][0] += i;
        xishu[1][0] += (i + 0LL) * i;
        xishu[0][2] += A[i];
        xishu[1][2] += (i + 0LL) * A[i];
    }
    xishu[0][1] = N;
    xishu[1][1] = xishu[0][0];

    Real k = xishu[0][2] * xishu[1][1] - xishu[1][2] * xishu[0][1];
    k /= xishu[1][1] * xishu[0][0] - xishu[0][1] * xishu[1][0];
    Real b = (xishu[0][2] - xishu[0][0] * k) / xishu[0][1];

    Real ans = 0;
    for(int i=0;i<N;++i){
        Real tmp = (k * i + b - A[i]);
        ans += tmp * tmp;
    }
    return ans;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofakse = 1;
    cin >> nofakse;
    while(nofakse--){
        cin >> N;
        A.assign(N, 0);
        for(auto & i : A) cin >> i;
        cout << fixed << setprecision(24) << proc() << endl;
    }
    return 0;
}